FILE_READ_PATH IMGPATH    map数据长度 Object.keys(coupons.data).length

history.replaceState(null,null,'/news/index'); 替换url地址 不刷新页面
#HTML: 
(1) 文本框：textarea
下拉选项框：select option  option的默认样式是无法改变的 一般用自己模拟的select控件
<select id="s1" name="">
    <option value="bj">Beijing</option>
</select>
将option的值改为 Shanghai value值为sh
1. document.getElementById("s1").options[1]=new Option("Shanghai","sh");

2. var op = document.createElement("option");
op.value = "sh";
op.innerHTML = "Shanghai";
document.getElementById("s1").appendChild(op);

${keyWord.replaceAll("\'","&apos;")} jsp 替换特殊字符

空格：	&nbsp; （No-Break Space 不换行空格 受字体影响）
	&ensp;（En Space 半角空格 en字体排印学的计量单位，为em宽度的一半1/2个中文宽度）
	&emsp;（Em Space 全角空格 1个中文宽度）&thinsp;（Thin Space 窄空格 1/6个中文宽度）
	&zwnj;(Zero Width Non Joiner 不连字字符映射  &#8204;)&zwj(Zero Width Joiner 不打印字符 零宽连字符 &#8205;);
只有&nbsp;是常规空格的宽度，可运行于所有的主流浏览器。其他几种空格，在不同浏览器中宽度各异

浏览器将以下字符当做空白来解析 空格&#x0020; 制表符&#x0009; 换行&#x000A; 回车&#x000D;

(2) 模态框
发布的提示模态框 data-toggle="modal" 可以用js打开 $("#Modalfabu").modal();
也可以用属性触发  data-toggle="modal" data-target="#Modalwriterule"

$("#showmodifyprice tbody").niceScroll() 滚动条方法
#CSS:
table
  {
  table-layout:fixed;
  }
表格固定宽度
(1) 文字的换行及不换行
1.1 word-wrap: break-word; 最后一个单词如果过长自动换下一行
1.2 将超长文字转化为... 
width:200px;
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;  有时会出现一个点或者两个点 是因为最后一个字符的位置不足以显示三个点，如果是将宽缩小还是会有类似问题出现 
目前最好的解决方法是 增加padding-right:1em; 

text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: X; ————这个X表示要显示几行-webkit-box-orient: vertical;其中div的高度自己要规定好。

text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3; //这个表示要显示几行
-webkit-box-orient: vertical;


1.3 word-wrap : break-word ;或者word-break:break-all;实现强制断行 white-space: pre-wrap;中文
word-wrap: break-word;(强制换行)
不换行
(2)边框弧度
border-radius: 5px;

(3)阴影盒子
box-shadow: 0px 0px 5px #ee4242;

(4)input 适配其他浏览器
谷歌浏览器的input的placeholder颜色适配 outline:none;
/*placeholder字体颜色*/  
::-webkit-input-placeholder { /* WebKit browsers */  
    color:    #ccc;  
}  
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */  
    color:    #ccc;  
}  
::-moz-placeholder { /* Mozilla Firefox 19+ */  
    color:    #ccc;opacity:1  
}  
:-ms-input-placeholder { /* Internet Explorer 10+ */  
    color:    #ccc !important;  
} 
(5)谷歌浏览器
@media screen and (-webkit-min-device-pixel-ratio:0) { }
(6）火狐浏览器
@-moz-document url-prefix() { }
#JS（JavaScript）:
$.each(data.data.price,function(k,v){
				console.log(k);
				console.log('keys' + v.id);
			})
${os_url}/userCenter/index

$("#id")[0] 转化为dom
$(span) dom转化为jq

document.getElementById("articletype").checked 获取id的input是否选中

var t = document.documentElement.scrollTop || document.body.scrollTop;  //离上方的距离
var h =window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; //可见宽度

#JQ（JavaQuery）:
.hasClass() 含有类名
.addClass() 
.removeClass() 
.parent()父元素
.siblings()
.prev()前一个元素
.next()下一个元素（同级）
.show();
.hide();
.text()获取文本内容
.html()
.val()
.attr("data") 获取属性值
.attr("data","你好")设置属性值
.removeAttr("data")删除属性
.remove()删除自身
.append() 在元素后面添加元素
.empty()从元素中移除所有内容 成为一个空标签
window.open("/news/topicShow?id="+item.id);打开某个网址
window.location.href="" 打开某个网址
window.location.reload() 刷新页面
$.post('链接',{参数：值}，function（data）{响应处理})；post请求
$.get('链接',{参数：值}，function（data）{响应处理})；get请求  ajax同步请求
$.ajax({  
			    type:"get",  
			    url:"/inLetters/checkReceiverUser?receiverUser="+receiverUser,  
			    async:false,//取消异步  
			    success:function(data){  
			    	if(data == 'notExist'){
			    		flag = false;
		        		alert(getName("receiver does not exist"));
		        		return false;
					}else{
						$('#receiverId').val(data);
					}
			    }  
			});
转json对象格式 JSON.parse()
转json字符串格式 JSON.stringify()
解析字符串返回整数 parseInt(）


#项目中的HTML：
@if(){}else{@if(){}else{}} 
@for( a <- ){}
$.each(需要遍历的对象,function(k,v){}) 遍历
滚动条
$("#div").niceScroll();
获取页码  
<input type="hidden" value="@page" id="curpage"/> 
在js中获取$("curpage").val()  获取到后台给的页码
date 类型的数据 通过后台的方法转化为字符串 
@CommonHelper.format(t.updateDate, "yyyy-MM-dd HH:mm:ss")

获取用户 公用方法（用户的登录状态）
@CommonHelper.current_user()
中英文转换时 中文在messages.zh中的 英文在messages.en中的
@Messages("createins") js LG.emailTs
onfocus="" 获取焦点 onblur="" 失去焦点
判断网址中是否含有apply
@Controller.request().uri().contains("apply")
判断返回给页面是否有数据
list.size()>0
安全起见要写完整
@if(pageApproval.getList()!=null && pageApproval.getList().size()>0){}
url 连接可以写 /index  也可以写 @routes.Application.newIndex()
routes   /pointsClaims/queryPagePointsClaim   controllers.PointsClaims.queryPagePointsClaim(page: Integer ?=0) 
html  /pointsClaims/queryPagePointsClaim?page=0   @routes.PointsClaims.queryPagePointsClaim(0)


#项目中的JQ：
用户不为空（用户的登录状态）
$("#curuser").val()!="" 

LG.createins  内容在en.js zh.js中
gologin()跳转到登录页面的一个方法
去掉前后空格
$.trim(）  

#项目中的插件：
typeahead 自动补全 bootstrap的一个插件

$.ajaxFileUpload 文件上传


@CommonHelper.imgServerPath() html获取路由
$("#serverpath").val() js获取路由





判断浏览器是什么

var explorer =navigator.userAgent ;
//ie 
if (explorer.indexOf("MSIE") >= 0) {
alert("ie");
}
//firefox 
else if (explorer.indexOf("Firefox") >= 0) {
alert("Firefox");
}
//Chrome
else if(explorer.indexOf("Chrome") >= 0){
alert("Chrome");
}
//Opera
else if(explorer.indexOf("Opera") >= 0){
alert("Opera");
}
//Safari
else if(explorer.indexOf("Safari") >= 0){
alert("Safari");
} 
//Netscape
else if(explorer.indexOf("Netscape")>= 0) { 
alert('Netscape'); 
} 
//判断终端是什么
 var u = navigator.userAgent;
 var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
 var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端

360 IE 下拉选项option中不能添加onclick事件 只能在select上绑定 change（）事件

niceScroll 插件不兼容安卓手机 用法：$("body").niceScroll();





var url = window.location.href;当前页面跳转 window.open(ctx + href)跳转新页面
if(url.indexOf("link") >= 0 ) { //判断url地址中是否包含link字符串
  alert("包含link字符");
}

对象里有方法及属性 方法内可打断点
提示框 要引用插件


var userAgent = navigator.userAgent;
var isAndroid = userAgent.indexOf('Android') > -1 || userAgent.indexOf('Adr') > -1; //android终端

var isiOS = !!userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端

alert('是否是Android：'+isAndroid);

alert('是否是iOS：'+isiOS);

其它博客：http://blog.csdn.net/wy978651775/article/details/9014039

对于手机浏览器判断
1.如何判断是否为移动终端 利用正则match，
匹配navigator.userAgent是否含有字符串AppleWebKit*****Mobile
安卓qq浏览器HD版 只有AppleWebKit
2手机语言版本的判断
使用navigator.browserLanguage 便可得出windows phone语言版本，
当然可恶的小小手机语言版本也有兼容性的差异，兼容Mozilla，以及AppleWebKit内核的浏览器访问其语言版本，它会列出 navigator.language
CODE：
<script type="text/javascript">
  var browser={
    versions:function(){
            var u = navigator.userAgent, app = navigator.appVersion;
            return {         //移动终端浏览器版本信息
                 trident: u.indexOf('Trident') > -1, //IE内核
                presto: u.indexOf('Presto') > -1, //opera内核
                webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
                gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
                mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
                iPhone: u.indexOf('iPhone') > -1 , //是否为iPhone或者QQHD浏览器
                iPad: u.indexOf('iPad') > -1, //是否iPad
                webApp: u.indexOf('Safari') == -1 //是否web应该程序，没有头部与底部
            };
         }(),
         language:(navigator.browserLanguage || navigator.language).toLowerCase()
}
document.writeln("语言版本: "+browser.language);
document.writeln(" 是否为移动终端: "+browser.versions.mobile);
document.writeln(" ios终端: "+browser.versions.ios);
document.writeln(" android终端: "+browser.versions.android);
document.writeln(" 是否为iPhone: "+browser.versions.iPhone);
document.writeln(" 是否iPad: "+browser.versions.iPad);
document.writeln(navigator.userAgent);
  </script>   
    
比较特别的地方
UC浏览器没有安卓报头，只返回：linux ，这里粗略的根据linux来判断是安卓（前提必须满足是移动终端，UC这点是满足的）
安卓QQ浏览器HD版检测的结果是：mac， Safari

找到并显示某一个option
$("#articletype").find("option[value = '"+str+"']").attr("selected","selected");


getCookie("lastlogintime")  获取最后一次登录的时间

window.location.href = link 跳转页面
getCookie('PLAY_LANG')=="en" 获取页面的语言是否为en英文
获取时间转化为2017-09-21 09:13:45
var year = new Date(parseInt(data.list[i].createDate)).getFullYear();
    				var month = new Date(parseInt(data.list[i].createDate)).getMonth() + 1;
    				var day = new Date(parseInt(data.list[i].createDate)).getDate();
    				var hour = new Date(parseInt(data.list[i].createDate)).getHours()+"";
    				var min = new Date(parseInt(data.list[i].createDate)).getMinutes()+"";
    				var sec = new Date(parseInt(data.list[i].createDate)).getSeconds()+"";
    				if(hour.length==1){
    					hour = "0"+hour;
    				}
    				if(min.length==1){
    					min = "0"+min;
    				}
    				if(sec.length==1){
    					sec = "0"+sec;
    				}
    				var showtime = year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec;


限制输入0-9 <input onkeydown="checkamount(event,this)" onkeyup="checkamount(event,this)"></input>
function checkamount(e,obj){
	var k = e.keyCode;
	if(e.shiftKey){
		e.preventDefault();
	}else if($(obj).val()==0 && (k==48||k==96)){
    	e.preventDefault();
    }else if($(obj).val().length>4 && k!=8 && k!=46){
		e.preventDefault();
	}else if(!((k>=48&&k<=57)||(k>=96&&k<=105)||k==8||k==46||k==37||k==39)){
		e.preventDefault();
	}
	var a = /[0-9]+/g;
	if(!a.test($(obj).val())){
		$(obj).val("");
	}
}
截取字符串
function substr(str,len){
		if(str.length>len)
		{
			var res = str.substring(0,len) + "...";
			return res;
		}else{
			return str;
		}
	}
引入头部
@header()

引入脚部
@CommonHelper.include("footer.html")

手机端校验不能用onkeyup
用oninput 是 HTML5 的标准事件，
对于检测 textarea, input:text, input:password 和 input:search 
这几个元素通过用户界面发生的内容变化非常有用，
在内容修改后立即被触发，不像 onchange 事件需要失去焦点才触发


新版在线商店
input的属性

checkType属性：1.integer 整数 2.positive 正数 3.price 价格 小数后两位 limit 限制输入最长的长度

input 不存在光标
方法1: onfocus=this.blur() 当鼠标放不上就离开焦点
<input type="text" name="input1" value="中国" onfocus=this.blur()>

方法2:readonly
<input type="text" name="input1" value="中国" readonly>
<input type="text" name="input1" value="中国" readonly="true">

方法3: disabled
<input type="text" name="input1" value="中国" disabled="true">



innerHTML 可以拷贝数据
clone() 副本 不可以用html(str)

资讯-新增分离豆 list 获取昵称的长度
@userMap(0).getString("nickname").length 

自营店铺ids
var cbgid = JSON.parse('${self_support_ids}'); 

// 替换url中的参数
function changeUrlArg(url, arg, val){
    var pattern = arg+'=([^&]*)';
    var replaceText = arg+'='+val;
    return url.match(pattern) ? url.replace(eval('/('+ arg+'=)([^&]*)/gi'), replaceText) : (url.match('[\?]') ? url+'&'+replaceText : url+'?'+replaceText);
}
找到元素添加滚动条方法
$("#showmodifyprice tbody").niceScroll()

禁止浏览器密码自动填充 onfocus="this.type='password'" 浏览器不会记住密码（无提醒框）   autocomplete="off"（仅对表单有用） autocomplete="new-password"（仅对谷歌有用）
新的编辑器塞值 window.editor.html(outdata.data.goods.introduction)